
 <!DOCTYPE HTML>
<html lang="zh-CN">
<head>
  <meta charset="UTF-8">
  
    <title>JVM-GC | Home</title>
    <meta name="viewport" content="width=device-width, initial-scale=1,user-scalable=no">
    
    <meta name="author" content="Mike Shaon">
    
    <meta name="description" content="GC简介
java语言运行在java虚拟机（jvm）上，为了解决有限的空间和性能的保证这个矛盾体，jvm所具备的GC能力，可以有效的清除不用的对象，使空间的利用更加合理。下面介绍该机制的原理。
判断对象已废弃

引用计数法给每一个对象都配备一个计数器，对于该对象，若增加一个指向它的引用，则计数器加1">
    
    
    <meta name="description" content="GC简介
java语言运行在java虚拟机（jvm）上，为了解决有限的空间和性能的保证这个矛盾体，jvm所具备的GC能力，可以有效的清除不用的对象，使空间的利用更加合理。下面介绍该机制的原理。
判断对象已废弃

引用计数法给每一个对象都配备一个计数器，对于该对象，若增加一个指向它的引用，则计数器加1；每失效一个引用，则计数器减一。但是，如果两个对象互相引用，但都对于外部都已失去用途，则这样的两个对">
<meta property="og:type" content="article">
<meta property="og:title" content="JVM-GC">
<meta property="og:url" content="http://ghostinmatrix.info/2015/03/19/JVM-垃圾回收（GC）/">
<meta property="og:site_name" content="Home">
<meta property="og:description" content="GC简介
java语言运行在java虚拟机（jvm）上，为了解决有限的空间和性能的保证这个矛盾体，jvm所具备的GC能力，可以有效的清除不用的对象，使空间的利用更加合理。下面介绍该机制的原理。
判断对象已废弃

引用计数法给每一个对象都配备一个计数器，对于该对象，若增加一个指向它的引用，则计数器加1；每失效一个引用，则计数器减一。但是，如果两个对象互相引用，但都对于外部都已失去用途，则这样的两个对">
<meta name="twitter:card" content="summary">
<meta name="twitter:title" content="JVM-GC">
<meta name="twitter:description" content="GC简介
java语言运行在java虚拟机（jvm）上，为了解决有限的空间和性能的保证这个矛盾体，jvm所具备的GC能力，可以有效的清除不用的对象，使空间的利用更加合理。下面介绍该机制的原理。
判断对象已废弃

引用计数法给每一个对象都配备一个计数器，对于该对象，若增加一个指向它的引用，则计数器加1；每失效一个引用，则计数器减一。但是，如果两个对象互相引用，但都对于外部都已失去用途，则这样的两个对">


    
    <link rel="alternative" href="/atom.xml" title="Home" type="application/atom+xml">
    
    
    <link rel="icon" href="/img/favicon.ico">
    
    
    <link rel="apple-touch-icon" href="/img/jacman.jpg">
    <link rel="apple-touch-icon-precomposed" href="/img/jacman.jpg">
    
    <link rel="stylesheet" href="/css/style.css" type="text/css">

</head>

  <body>
    <header>
      <div>
		
			<div id="imglogo">
				<a href="/"><img src="/img/logo.png" alt="Home" title="Home"/></a>
			</div>
			
			<div id="textlogo">
				<h1 class="site-name"><a href="/" title="Home">Home</a></h1>
				<h2 class="blog-motto">there was a ghost in acient time, trapped in the matrix</h2>
			</div>
			<div class="navbar"><a class="navbutton navmobile" href="#" title="菜单">
			</a></div>
			<nav class="animated">
				<ul>
					<ul>
					 
						<li><a href="/archives">目录</a></li>
					
						<li><a href="/about">关于</a></li>
					
					<li>
 					
					<form class="search" action="//google.com/search" method="get" accept-charset="utf-8">
						<label>Search</label>
						<input type="search" id="search" name="q" autocomplete="off" maxlength="20" placeholder="搜索" />
						<input type="hidden" name="q" value="site:ghostinmatrix.info">
					</form>
					
					</li>
				</ul>
			</nav>			
</div>
    </header>
    <div id="container">
      <div id="main" class="post" itemscope itemprop="blogPost">
  
	<article itemprop="articleBody"> 
		<header class="article-info clearfix">
  <h1 itemprop="name">
    
      <a href="/2015/03/19/JVM-垃圾回收（GC）/" title="JVM-GC" itemprop="url">JVM-GC</a>
  </h1>
  <p class="article-author">By
       
		<a href="http://ghostinmatrix.info/about" title="Mike Shaon" target="_blank" itemprop="author">Mike Shaon</a>
		
  <p class="article-time">
    <time datetime="2015-03-19T04:44:10.000Z" itemprop="datePublished"> 发表于 3月 19 2015</time>
    
  </p>
</header>
	<div class="article-content">
		
		<div id="toc" class="toc-article">
			<strong class="toc-title">文章目录</strong>
		
			<ol class="toc"><li class="toc-item toc-level-3"><a class="toc-link" href="#GC简介"><span class="toc-number">1.</span> <span class="toc-text">GC简介</span></a></li><li class="toc-item toc-level-3"><a class="toc-link" href="#判断对象已废弃"><span class="toc-number">2.</span> <span class="toc-text">判断对象已废弃</span></a></li><li class="toc-item toc-level-3"><a class="toc-link" href="#如何释放无用的对象空间"><span class="toc-number">3.</span> <span class="toc-text">如何释放无用的对象空间</span></a></li></ol>
		
		</div>
		
		<h3 id="GC简介">GC简介</h3>
<p>java语言运行在java虚拟机（jvm）上，为了解决有限的空间和性能的保证这个矛盾体，jvm所具备的GC能力，可以有效的清除不用的对象，使空间的利用更加合理。下面介绍该机制的原理。</p>
<h3 id="判断对象已废弃">判断对象已废弃</h3>
<ul>
<li>引用计数法<br>给每一个对象都配备一个计数器，对于该对象，若增加一个指向它的引用，则计数器加1；每失效一个引用，则计数器减一。<br>但是，如果两个对象互相引用，但都对于外部都已失去用途，则这样的两个对象是无法被计数为0的，因为他们的计数器永远都只为1。</li>
<li>可达性分析法<br>为了解决引用计数法的缺陷，我们引入可达性分析。<br>从引用链的顶端root开始，只要在这条引用链上的对象都是有用的，因此不应该被回收。而对于剩下的对象，一定是不可到达的对象，也就没什么意义了。</li>
</ul>
<h3 id="如何释放无用的对象空间">如何释放无用的对象空间</h3>
<ul>
<li><p>标记清除<br>将废弃的对象空间标记出来，直接清除即可。<br>但是，这样会造成空间的碎片过多。如果有较大的对象需要空间，则会有更大的可能，它无法找到这样的空间。</p>
</li>
<li><p>复制法<br>将堆空间分为两块，不妨叫做from和to。每次new对象的时候，先放在from上，（to块保持空闲），直到from区域放满，这是要进行垃圾回收，将存活的对象复制到 to上，然后清空from区域，并将from和to进行互换，重新开始。<br>缺点是，总有一部分空间要充当to区域，因此该区域总是空闲着等待交换。造成内存的浪费。</p>
</li>
<li><p>标记整理<br>类似于标记清楚，只不过是在标记之后不是简单的清除，而是将存货对象整理好，一个一个排在一起。让后释放剩下的连续的一整块空间。这样做的坏处是，需要对所有对象进行复制移动，比较耗时。</p>
</li>
<li><p>分代处理<br>将堆内存区分为Eden区，survivorFrom区、surviorTo区（以上三个都属于年轻代），老年代和永久代。</p>
</li>
</ul>
<ol>
<li>新建对象的时候一般是首先放在年轻代的Eden和surviorFrom中，当满了之后，将存活对象放入survivorTo中（及MinorGC），放不下的直接放入年老代；互换survivor的from和to区。</li>
<li>当老年代也满了之后，将执行一整个的大清洗FullGC，将所有堆内存（除了永久代）进行一次完整的GC。</li>
<li>永久代是不会在主程序运行期间进行GC的。永久代主要存放Class类信息。</li>
</ol>
  
	</div>
		<footer class="article-footer clearfix">
<div class="article-catetags">


  <div class="article-tags">
  
  <span></span> <a href="/tags/GC/">GC</a><a href="/tags/垃圾回收/">垃圾回收</a>
  </div>

</div>



	<div class="article-share" id="share">
	
	  <div data-url="http://ghostinmatrix.info/2015/03/19/JVM-垃圾回收（GC）/" data-title="JVM-GC | Home" data-tsina="2467872254" class="share clearfix">
	  </div>
	
	</div>


</footer>

   	       
	</article>
	
<nav class="article-nav clearfix">
 

<div class="next">
<a href="/2015/01/30/MarkDown-语法/"  title="MarkDown 语法">
 <strong>下一篇：</strong><br/> 
 <span>MarkDown 语法
</span>
</a>
</div>

</nav>

	

</div>  
      <div class="openaside"><a class="navbutton" href="#" title="显示侧边栏"></a></div>

  <div id="toc" class="toc-aside">
  <strong class="toc-title">文章目录</strong>
 
 <ol class="toc"><li class="toc-item toc-level-3"><a class="toc-link" href="#GC简介"><span class="toc-number">1.</span> <span class="toc-text">GC简介</span></a></li><li class="toc-item toc-level-3"><a class="toc-link" href="#判断对象已废弃"><span class="toc-number">2.</span> <span class="toc-text">判断对象已废弃</span></a></li><li class="toc-item toc-level-3"><a class="toc-link" href="#如何释放无用的对象空间"><span class="toc-number">3.</span> <span class="toc-text">如何释放无用的对象空间</span></a></li></ol>
 
  </div>

<div id="asidepart">
<div class="closeaside"><a class="closebutton" href="#" title="隐藏侧边栏"></a></div>
<aside class="clearfix">

  

  
<div class="tagslist">
	<p class="asidetitle">标签</p>
		<ul class="clearfix">
		
			<li><a href="/tags/垃圾回收/" title="垃圾回收">垃圾回收<sup>1</sup></a></li>
		
			<li><a href="/tags/GC/" title="GC">GC<sup>1</sup></a></li>
		
			<li><a href="/tags/文本编辑/" title="文本编辑">文本编辑<sup>1</sup></a></li>
		
			<li><a href="/tags/Markdown/" title="Markdown">Markdown<sup>1</sup></a></li>
		
		</ul>
</div>


  <div class="rsspart">
	<a href="/atom.xml" target="_blank" title="rss">RSS 订阅</a>
</div>

</aside>
</div>
    </div>
    <footer><div id="footer" >
	
	<div class="line">
		<span></span>
		<div class="author"></div>
	</div>
	
	
	<section class="info">
		<p> Hello ,I&#39;m Ghost in Matrix <br/>
			This is my blog, and I spent all day making it.</p>
	</section>
	 
	<div class="social-font" class="clearfix">
		
		<a href="http://weibo.com/2467872254" target="_blank" class="icon-weibo" title="微博"></a>
		
		
		
		
		
		
		
		
		
		
	</div>
		<p class="copyright">Powered by <a href="http://zespia.tw/hexo/" target="_blank" title="hexo">hexo</a> and Theme by <a href="https://github.com/wuchong/jacman" target="_blank" title="Pacman">Jacman</a> © 2015 
		
		<a href="http://ghostinmatrix.info/about" target="_blank" title="Mike Shaon">Mike Shaon</a>
		
		</p>
</div>
</footer>
    <script src="/js/jquery-2.0.3.min.js"></script>
<script src="/js/jquery.imagesloaded.min.js"></script>
<script src="/js/gallery.js"></script>

<script type="text/javascript">
$(document).ready(function(){ 
  $('.navbar').click(function(){
    $('header nav').toggleClass('shownav');
  });
  var myWidth = 0;
  function getSize(){
    if( typeof( window.innerWidth ) == 'number' ) {
      myWidth = window.innerWidth;
    } else if( document.documentElement && document.documentElement.clientWidth) {
      myWidth = document.documentElement.clientWidth;
    };
  };
  var m = $('#main'),
      a = $('#asidepart'),
      c = $('.closeaside'),
      o = $('.openaside');
  $(window).resize(function(){
    getSize(); 
    if (myWidth >= 1024) {
      $('header nav').removeClass('shownav');
    }else
    {
      m.removeClass('moveMain');
      a.css('display', 'block').removeClass('fadeOut');
      o.css('display', 'none');
      
      $('#toc.toc-aside').css('display', 'none');
        
    }
  });
  c.click(function(){
    a.addClass('fadeOut').css('display', 'none');
    o.css('display', 'block').addClass('fadeIn');
    m.addClass('moveMain');
  });
  o.click(function(){
    o.css('display', 'none').removeClass('beforeFadeIn');
    a.css('display', 'block').removeClass('fadeOut').addClass('fadeIn');      
    m.removeClass('moveMain');
  });
  $(window).scroll(function(){
    o.css("top",Math.max(80,260-$(this).scrollTop()));
  });
});
</script>

<script type="text/javascript">
$(document).ready(function(){ 
  var ai = $('.article-content>iframe'),
      ae = $('.article-content>embed'),
      t  = $('#toc'),
      h  = $('article h2')
      ah = $('article h2'),
      ta = $('#toc.toc-aside'),
      o  = $('.openaside'),
      c  = $('.closeaside');
  if(ai.length>0){
    ai.wrap('<div class="video-container" />');
  };
  if(ae.length>0){
   ae.wrap('<div class="video-container" />');
  };
  if(ah.length==0){
    t.css('display','none');
  }else{
    c.click(function(){
      ta.css('display', 'block').addClass('fadeIn');
    });
    o.click(function(){
      ta.css('display', 'none');
    });
    $(window).scroll(function(){
      ta.css("top",Math.max(140,320-$(this).scrollTop()));
    });
  };
});
</script>


<script type="text/javascript">
$(document).ready(function(){ 
  var $this = $('.share'),
      url = $this.attr('data-url'),
      encodedUrl = encodeURIComponent(url),
      title = $this.attr('data-title'),
      tsina = $this.attr('data-tsina'),
      description = $this.attr('description');
  var html = [
  '<a href="#" class="overlay" id="qrcode"></a>',
  '<div class="qrcode clearfix"><span>扫描二维码分享到微信朋友圈</span><a class="qrclose" href="#nothing"></a><strong>Loading...Please wait</strong><img id="qrcode-pic" data-src="http://s.jiathis.com/qrcode.php?url=' + encodedUrl + '"/></div>',
  '<a href="https://www.facebook.com/sharer.php?u=' + encodedUrl + '" class="article-share-facebook" target="_blank" title="Facebook"></a>',
  '<a href="https://twitter.com/intent/tweet?url=' + encodedUrl + '" class="article-share-twitter" target="_blank" title="Twitter"></a>',
  '<a href="#qrcode" class="article-share-qrcode" title="微信"></a>',
  '<a href="http://widget.renren.com/dialog/share?resourceUrl=' + encodedUrl + '&srcUrl=' + encodedUrl + '&title=' + title +'" class="article-share-renren" target="_blank" title="人人"></a>',
  '<a href="http://service.weibo.com/share/share.php?title='+title+'&url='+encodedUrl +'&ralateUid='+ tsina +'&searchPic=true&style=number' +'" class="article-share-weibo" target="_blank" title="微博"></a>',
  '<span title="Share to"></span>'
  ].join('');
  $this.append(html);
  $('.article-share-qrcode').click(function(){
    var imgSrc = $('#qrcode-pic').attr('data-src');
    $('#qrcode-pic').attr('src', imgSrc);
    $('#qrcode-pic').load(function(){
        $('.qrcode strong').text(' ');
    });
  });
});     
</script>









<link rel="stylesheet" href="/fancybox/jquery.fancybox.css" media="screen" type="text/css">
<script src="/fancybox/jquery.fancybox.pack.js"></script>
<script type="text/javascript">
$(document).ready(function(){ 
  $('.article-content').each(function(i){
    $(this).find('img').each(function(){
      if ($(this).parent().hasClass('fancybox')) return;
      var alt = this.alt;
      if (alt) $(this).after('<span class="caption">' + alt + '</span>');
      $(this).wrap('<a href="' + this.src + '" title="' + alt + '" class="fancybox"></a>');
    });
    $(this).find('.fancybox').each(function(){
      $(this).attr('rel', 'article' + i);
    });
  });
  if($.fancybox){
    $('.fancybox').fancybox();
  }
}); 
</script>



<!-- Analytics Begin -->





<!-- Analytics End -->

<!-- Totop Begin -->

	<div id="totop">
	<a title="返回顶部"><img src="/img/scrollup.png"/></a>
	</div>
	<script src="/js/totop.js"></script>

<!-- Totop End -->

<!-- MathJax Begin -->
<!-- mathjax config similar to math.stackexchange -->


<!-- MathJax End -->

  </body>
</html>
